#include <iostream>
#include <vector>
#include <string>
#include <queue>
#include <unordered_map>
// 最长的斐波那契子序列的长度：https://leetcode.cn/problems/length-of-longest-fibonacci-subsequence/
using namespace std;
class Solution {
public:
    int lenLongestFibSubseq(vector<int>& arr) {
        int n=arr.size();
        vector<vector<int>> dp(n,vector<int>(n,2));
        unordered_map<int,int> hash;
        for(int i=0;i<n;i++) hash[arr[i]]=i;
        int ret=2;
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(i<j)
                {
                    auto pos=hash.find(arr[j]-arr[i]);
                    if(pos!=hash.end()&&pos->second<i)
                        dp[i][j]=max(dp[i][j],dp[pos->second][i]+1);
                    ret=max(ret,dp[i][j]);
                }
            }
        }
        return ret<3?0:ret;
    }
};